"""
简化数据结构的初始化

问题：
    你写了很多仅仅用作数据结构的类，不想写太多烦人的 __init__() 函数。
解决方案：
    可以在一个基类中写一个公用的 __init__() 函数。
"""


class Base:
    """
    基础类
    """

    _fields = []

    def __init__(self, *args, **kwargs):
        if len(args) != len(self._fields):
            raise TypeError("Expected {} arguments".format(len(self._fields)))

        for name, value in zip(self._fields, args):
            setattr(self, name, value)

        extra_args = kwargs.keys() - self._fields
        for name in extra_args:
            setattr(self, name, kwargs.pop(name))

        if kwargs:
            raise TypeError("Duplicate values for {}".format(','.join(kwargs)))


class User(Base):
    _fields = ["uid", "name", "gender"]

    def __str__(self):
        return str(self.__dict__['uid'])


def use_user():
    user1 = User(1001, "Kevin", 1)
    user2 = User(1002, "葛小伦", 1, age=18)
    print(user1)
    print(user2)
    # 输出结果
    """
    1001
    1002
    """


if __name__ == '__main__':
    use_user()
